<?php
namespace app\api;
use think\facade\Db;
class BaseController{

    /**
     * 限制只可get提交
     */
    protected static function requestGet(){
        if( !(request()->isGet()) ) {
            echo json_encode(['status'=>500,'msg'=>'此方法使用Get提交']);
            exit;
        }
    }

    /**
     * 限制只可post提交
     */
    protected static function requestPost(){
        if( !(request()->isPost()) ) {
            echo json_encode(['status'=>500,'msg'=>'此方法使用post提交']);
            exit;
        }
    }

    /**
     * 查询数据表数据
     * @param string $table 数据表名
     * @param int $page 分页
     * @param int $limit 取出几条
     * @param array $result2 搜索参数
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\DbException
     * @throws \think\db\exception\ModelNotFoundException
     */
    protected function getData(string $table,int $page,int $limit,array $result2)
    {
        self::requestGet();
        $w = array();
        foreach($result2 as $k=>$v) {
            if(is_array($v[1])){
                $start_time = $v[1][0];
                $end_time = $v[1][1];
                if($start_time!=""&&$end_time!=""){
                    $w[] = "$k $v[0] '$start_time' AND '$end_time'";
                }
            }else{
                if($v[1]!==""){
                    $w[] = "$k $v[0] '$v[1]'";
                }
            }

        }
        $where = join(' and ', $w);
        $table_data = Db::table($table)
            ->page($page,$limit)
            ->where($where)
            ->select();
        $table_total = Db::table($table)
            ->where($where)
            ->count();
        echo json_encode([
            'status' => 200,
            'msg' => 'ok',
            'data' => $table_data,
            'total' => $table_total
        ]);
        exit;
    }

    /**
     * 添加数据
     * @param string $table 数据表名
     * @param array $data 添加的数据
     */
    protected function addData(string $table,array $data){
        self::requestPost();
        $add = Db::table($table)->insert($data);
        $msg_type = '添加';
        if($add){
            success($msg_type);
        }else{
            fail($msg_type);
        }
    }

    /**
     * 修改数据
     * @param string $table 数据表名
     * @param array $update_result 更新条件
     * @param array $update_data 更新的数据
     * @param string $msg_type 提示信息
     * @throws \think\db\exception\DbException
     */
    protected function updateData(string $table,array $update_result,array $update_data,string $msg_type){
        self::requestPost();
        $update = Db::table($table)->where($update_result)->update($update_data);;
        if($update)
            success($msg_type);
        else
            fail($msg_type);
    }

    /**
     * 删除数据
     * @param string $table 数据表名
     * @param array $del_result 删除条件
     * @param string $file_fields 需要删除的’资源文件‘字段
     * @param bool $type 删除类型：true真删使用delete，false软删使用update更改del_status
     * @throws \think\db\exception\DbException
     */
    protected function delData(string $table,array $del_result,string $file_fields='',bool $type=false){
        self::requestPost();
        if($type == true){ //真删
            if(empty($file_fields)){//如果没有资源文件，则只删除数据表数据
                $del = Db::table($table)->where($del_result)->delete();
            }else{//否则删除资源文件，且删除数据表数据
                $strLong = Db::table($table)->where($del_result)->value($file_fields);
                $file_resources =  cutOutUrl($strLong);
                $str = $_SERVER['REQUEST_SCHEME']."://".$_SERVER['HTTP_HOST'];
                //判断此url是否是当前网站的资源文件，不是则提示
                if (strpos($strLong, $str) !== false){//查找 $str 在字符串中第一次出现的位置：不存在返回false，存在返回出现的位置
                    //echo '-----1'.$url."中包含".$str;
                    $del = unlink($file_resources['del_url'])&&Db::table($table)->where($del_result)->delete();
                }else{
                    //echo '-----2'.$url."不包含".$str;
                    fail('当前资源不存在，删除');
                }
            }

        }else{//软删除
            $del = Db::table($table)->where($del_result)->update(['del_status'=>1,'del_time'=>date("Y-m-d H:i:s")]);
        }
        $msg_type = '删除';
        if($del)
            success($msg_type);
        else
            fail($msg_type);
    }

    /**
     * 删除全部数据
     * @param string $table 数据表名
     * @param array $del_result 删除条件
     * @param bool $type 删除类型：true真删使用delete，false软删使用update更改del_status
     * @throws \think\db\exception\DbException
     */
    public function delAllData(string $table,array $del_result,bool $type=false){
        self::requestPost();
        $data = request()->param();
        $token = request()->header('token');
        $checkToken = checkToken($token);
        $uid = $checkToken['data']->uid;
        $admin_password = Db::table('admin')->where('admin_id',$uid)->value('admin_password');
        $check_data = checkPassword($data['admin_password'],$admin_password);
        if($check_data['status']==500){
            echo json_encode(['status'=>500,'msg'=>'密码错误！']);
            exit;
        }
        if($type == true){ //真删
            $del = Db::table($table)->delete(true);
        }else{//软删除
            $del = Db::table($table)->where($del_result)->update(['del_status'=>1,'del_time'=>date("Y-m-d H:i:s")]);
        }
        $msg_type = '删除全部';
        if($del)
            success($msg_type);
        else
            fail($msg_type);
    }
}

